
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>5、_RocketMQ_高级特性 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>5、_RocketMQ_高级特性 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">RocketMQ的两种刷盘策略是什么？它们各自的优缺点是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 同步刷盘：消息写入内存后，立即将数据刷写到磁盘，只有在刷盘成功后才向生产者返回成功响应。优点是消息不会因为Broker宕机而丢失，缺点是性能较低。<br>2. 异步刷盘：消息写入内存后立即返回成功，后台线程定期将数据刷写到磁盘。优点是性能高、吞吐量大，缺点是Broker宕机可能导致消息丢失。</div>
          </div>
          <div class="card-source">来源: 1. 消息一致性保证机制 -> 存储一致性保证 -> 刷盘策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">RocketMQ的主从复制策略有哪两种？它们在可靠性和性能方面有何不同？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 同步双写：消息写入Master成功后，必须同步复制到Slave才返回成功。优点是能保证数据在Master宕机时不丢失，缺点是性能会降低。<br>2. 异步复制：消息写入Master成功后立即返回，后台异步复制到Slave。优点是性能高、吞吐量大，缺点是Master宕机可能导致少量消息丢失。</div>
          </div>
          <div class="card-source">来源: 1. 消息一致性保证机制 -> 投递一致性保证 -> 主从复制策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">RocketMQ的事务消息是如何实现分布式事务的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">RocketMQ通过两阶段提交机制实现分布式事务。它首先发送“半消息”(half message)，然后执行本地事务。根据本地事务的结果，它决定是提交还是回滚该半消息。此外，它还提供了事务状态回查机制，用于定期检查长时间未确认的事务状态，以确保最终一致性。</div>
          </div>
          <div class="card-source">来源: 1. 消息一致性保证机制 -> 端到端一致性设计 -> 事务消息</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">RocketMQ如何处理消费失败的消息？请描述其重试和死信队列机制。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当消息消费失败时，RocketMQ会进行自动重试。失败的消息会进入一个特殊的重试队列，并按照指数退避策略进行延迟消费。如果消息在多次重试后仍然失败，它最终会被发送到死信队列，等待人工干预和处理。</div>
          </div>
          <div class="card-source">来源: 1. 消息一致性保证机制 -> 消费一致性保证 -> 消费重试机制</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">架构</div>
          <div class="card-question">一个典型的RocketMQ集群监控系统包含哪些核心组件或层次？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">架构</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">一个典型的监控系统通常包含四个核心层次：<br>1. 数据采集层：通过JMX、日志、系统指标等方式采集数据。<br>2. 数据存储层：使用时序数据库（如Prometheus）和日志存储（如ELK Stack）来存储数据。<br>3. 数据展示层：通过监控面板（如Grafana）进行可视化展示，并配置告警通知。<br>4. 管理控制层：提供如RocketMQ Dashboard和自动化运维工具进行管理。</div>
          </div>
          <div class="card-source">来源: 2. 集群监控与运维最佳实践 -> 监控系统架构设计 -> 监控架构</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">运维</div>
          <div class="card-question">在运维RocketMQ时，当发现“消息堆积”问题时，推荐的排查步骤和解决方案是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">运维</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">排查步骤：<br>1. 检查消费者状态是否正常运行以及有无异常。<br>2. 检查单条消息的处理时间是否过长。<br>3. 检查消费者数量是否足够处理当前负载。<br>解决方案：<br>1. 增加消费者实例以提高并行处理能力。<br>2. 优化消费逻辑以减少单条消息处理时间。<br>3. 增加批量消费的大小来提高效率。</div>
          </div>
          <div class="card-source">来源: 2. 集群监控与运维最佳实践 -> 常见问题排查流程 -> 消息堆积</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">RocketMQ支持哪几种跨机房/跨区域部署模型？它们分别适用于什么场景？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">RocketMQ支持三种主要模型：<br>1. 单集群跨机房部署：Master和Slave分布在不同机房，适用于同城双活场景。<br>2. 多集群部署：每个区域独立部署完整集群，适用于异地多活场景。<br>3. 混合部署：一个主区域承担主要流量，一个备区域作为灾备，适用于主备容灾场景。</div>
          </div>
          <div class="card-source">来源: 3. 跨机房/跨区域部署设计 -> 多数据中心架构模型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">在跨区域部署中，数据同步面临哪些主要挑战？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">数据同步面临的主要挑战包括：<br>1. 网络延迟：跨区域的高延迟和网络抖动会影响同步性能。<br>2. 数据一致性：异步复制可能导致数据不一致，网络分区可能导致脑裂。<br>3. 冲突处理：在双向复制等场景下，可能出现写冲突，需要明确的解决策略。<br>4. 性能开销：同步复制会增加延迟，并且复制流量会占用带宽资源。</div>
          </div>
          <div class="card-source">来源: 3. 跨机房/跨区域部署设计 -> 数据同步策略与挑战 -> 同步挑战</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">请对比冷备份、温备份和热备份这三种灾备策略的特点和优缺点。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 冷备份：定期备份数据，灾难时手动恢复。优点是成本低，缺点是恢复时间长且可能丢失数据。<br>2. 温备份：备用区预部署系统，数据异步复制。优点是恢复较快，缺点是有一定数据丢失风险。<br>3. 热备份：备用区实时同步数据，随时可接管业务。优点是切换迅速、几乎无数据丢失，缺点是成本高。</div>
          </div>
          <div class="card-source">来源: 3. 跨机房/跨区域部署设计 -> 灾备与切换机制 -> 灾备策略</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
